
/**
* Copyright 2016-3-29 北京福富软件技术股份有限公司
* All Rights Reserved.
* 文件名称: LogAop.java  
* 初始作者：yaozhx 
* 初始版本：V1.0.0   
* 完成日期： 2016-3-29 
*/
package com.init;

import java.util.Arrays;

import com.util.LogUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/********************************************************
 * 类名：LogAop
 * 功能：切面日志打印
 * 作者：Yaozhx 2016-3-29
 * 修改记录：
 * 		 日期				 修改人			     修改说明
 ********************************************************/

@Aspect
@Component  
public class LogAop {
     
	    /********************************************************
	    * 函数名: beforeMethod
	    * 功能     : 方法执行之前
	    * 作者      ：Yaozhx 2016-5-3
	    * 参数表: @param jp    
	    * 返回值: void    
	    * 修改记录：
	    *          日期                 修改人                 修改说明
	    ********************************************************/
	    @Before("execution(* *.service.impl.*.*(..))")
	    public void beforeMethod(JoinPoint jp){
			
       	  //原实体类名（包括包名）  
           String className = jp.getTarget().getClass().getName();  
           //原方法名  
           String methodName =jp.getSignature().getName();  
           //原方法实参列表  
           Object[] arguments = jp.getArgs(); 
           LogUtil.info("原实体类名==>"+className);
           LogUtil.info("原方法名==>"+methodName);
           LogUtil.info("原方法实参列表==>"+Arrays.asList(arguments));
	    	
	    }

	    /********************************************************
	    * 函数名: afterMethod
	    * 功能     : 在执行方法出现异常时执行，可以访问到异常的对象，且可以指定出现特定的异常才执行，如空指针异常时才会执行
	    * 作者      ：Yaozhx 2016-5-3
	    * 参数表: @param jp
	    * 参数表: @param e    
	    * 返回值: void    
	    * 修改记录：
	    *          日期                 修改人                 修改说明
	    ********************************************************/

	    @AfterThrowing(value="execution(* *.service.impl.*.*(..))",throwing="e")
        public void afterMethod(JoinPoint jp, Exception e){
	    	
	  	  //原实体类名（包括包名）  
	           String className = jp.getTarget().getClass().getName();  
	           //原方法名  
	           String methodName =jp.getSignature().getName();  
	           //原方法实参列表  
	           Object[] arguments = jp.getArgs(); 
	           LogUtil.error("原实体类名==>"+className);
	           LogUtil.error("原方法名==>"+methodName);
	           LogUtil.error("原方法实参列表==>"+Arrays.asList(arguments));
	           LogUtil.error("异常信息===>"+e.getMessage()+"    "+e.getLocalizedMessage());
	    }
	
}
